import { mapValues, without } from 'lodash-es'
export const commonDefaultProps = {
  // actions
  actionType: '',
  url: '',
  // size
  height: '',
  width: '318px',
  paddingLeft: '0px',
  paddingRight: '0px',
  paddingTop: '0px',
  paddingBottom: '0px',
  // border type
  borderStyle: 'none',
  borderColor: '#000',
  borderWidth: '0',
  borderRadius: '0',
  // shadow and opacity
  boxShadow: '0 0 0 #000000',
  opacity: 1,
  // position and x,y
  position: 'absolute',
  left: '0',
  top: '0',
  right: '0'
}
export const textDefaultProps = {
  // basic props - font styles
  text: '正文内容',
  fontSize: '14px',
  fontFamily: '',
  fontWeight: 'normal',
  fontStyle: 'normal',
  textDecoration: 'none',
  lineHeight: '1',
  textAlign: 'left',
  color: '#000000',
  backgroundColor: '',
  ...commonDefaultProps
}
// 获取所有的样式属性（剔除非样式属性）
export const textStylePropNames = without(Object.keys(textDefaultProps), 'actionType', 'url', 'text')
/**
 * 将所有属性(样式属性+其他属性)转化为组件props属性
 * @param props 
 * @returns 
 * 例如： 
 * 在LText组件内部 通过props接收所有属性并进行验证的代码
 * props: {
      text: {
        type: String,
      },
      fontSize: {
        type: String,
      }
 */
export const transformToComponentProps = <T extends {[key:string]:any}>(props: T) => {
  return mapValues(props, (item) => {
    return {
      type: item.constructor,
      default: item
    }
  })
}

